package 牛客.查找;/*
 *@Author: helen
 *@Date:   2021/4/22 11:07
 *@Description:
题目描述
    请实现有重复数字的升序数组的二分查找
    给定一个 元素有序的（升序）整型数组 nums 和一个目标值 target  ，
    写一个函数搜索 nums 中的 target，如果目标值存在返回下标，否则返回 -1
    示例1
        输入    [1,2,4,4,5],4
        返回值   2
        说明     从左到右，查找到第1个为4的，下标为2，返回2
    示例2
        输入      [1,2,4,4,5],3
        返回值     -1
    示例3
        输入      [1,1,1,1,1],1
        返回值     0
 */

public class 二分查找 {
    public int search (int[] nums, int target) {
        // write code here
        if(nums == null || nums.length == 0 || nums[nums.length - 1] < target)
            return -1;
        int left = 0;
        int right = nums.length - 1;
        while (left <= right){
            int mid = (left + right) / 2;
            if(target == nums[mid])
                return mid;
            else if(target > nums[mid])
                left = mid + 1;
            else right = mid - 1;
        }
        return -1;
    }

    public static void main(String[] args) {
        二分查找 obj = new 二分查找();
        int nums[] = {1,2,3,4,5,9};
        int target = 1;
        System.out.println(obj.search(nums, target));
    }
}
